package com.toannv.handler;

import java.util.List;

import com.smartfoxserver.v2.entities.Room;
import com.smartfoxserver.v2.entities.User;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.entities.data.SFSObject;
import com.smartfoxserver.v2.extensions.BaseClientRequestHandler;
import com.toannv.card.card;
import com.toannv.definitions.KeyObjectId;
import com.toannv.definitions.RequestId;
import com.toannv.definitions.ResponseId;
import com.toannv.extension.RoomExtension;
import com.toannv.helper.Roomhelper;

public class DanhBaiHandler extends BaseClientRequestHandler{

	@Override
	public void handleClientRequest(User sender, ISFSObject paras) {
		// TODO Auto-generated method stub
		int idSender = sender.getPlayerId();
		
		//nếu id của người gửi phù hợp với id của người được phép đánh
		if(idSender == RoomExtension.UserRunning){
			//lấy ra điểm số của quân bài
			int number = paras.getInt(KeyObjectId.CARD_NUMBER);
			//lấy ra số chất của quân bài
			int poker = paras.getInt(KeyObjectId.CARD_POKER);
			
			//tạo đối tượng card là quân bài mà người chơi yêu cầu đánh
			card ThisCard = new card(number, poker);
			
			boolean isExist = false;
			//kiểm tra xem quân bài người chơi gửi có tồn tại trong bộ bài của người chơi không
			for(int i =0; i<RoomExtension.CardOfUser[idSender].length; i++){
				if(ThisCard.compare(RoomExtension.CardOfUser[idSender][i])){
					isExist = true;
					break;
				}
			}
			
			//nếu quân bài tồn tại
			if(isExist){
				//tạo đối tượng phòng chơi hiện tại
				Room CurrentRoom = Roomhelper.getCurrentRoom(this);
				//danh sách người chơi ở trong phòng
				List<User> user = CurrentRoom.getUserList();
				
				//Tạo đối tượng lưu trữ quân bài và gửi cho tất cả người trong phòng chơi
				SFSObject quanbai = new SFSObject();
				quanbai.putInt(KeyObjectId.CARD_NUMBER, number);
				quanbai.putInt(KeyObjectId.CARD_POKER, poker);
				
				//xóa đối tượng quân bài trong tập bài của người chơi
				for(int i=0; i<RoomExtension.CardOfUser[idSender].length; i++){
					if(RoomExtension.CardOfUser[idSender][i].getNumber() == number && RoomExtension.CardOfUser[idSender][i].getPoker() == poker){
						RoomExtension.CardOfUser[idSender][i].setNumber(0);
						RoomExtension.CardOfUser[idSender][i].setPoker(0);
					}
				}
				
				send(ResponseId.DANH_BAI, quanbai, user);
				
				nextstep(idSender, ThisCard, sender, user);
			}
		}
	}
	
	private void nextstep(int idSender, card ThisCard, User sender, List<User> user){
		SFSObject message_haPhom = new SFSObject();
		if(idSender == 0){
			RoomExtension.CardOfUser0Push.push(ThisCard);
			
			if(RoomExtension.CardOfUser0Push.size()==4){
				send(ResponseId.HA_PHOM, message_haPhom, sender);
				RoomExtension.haPhomid = idSender;
			}
			else{
				//Gửi cho người chơi trong phòng biết id của người sẽ bốc hoặc ăn bài
				SFSObject sfsO = new SFSObject();
				sfsO.putInt(KeyObjectId.BOC_HOAC_AN_BAI_ID, (idSender+1) % (RoomExtension.NumberOfPlayers));
				RoomExtension.UserRunning = (idSender+1) % (RoomExtension.NumberOfPlayers);
				send(RequestId.BOC_HOAC_AN_BAI, sfsO, user);
			}
		}
		else if(idSender == 1){
			RoomExtension.CardOfUser1Push.push(ThisCard);
			
			if(RoomExtension.CardOfUser1Push.size()==4){
				send(ResponseId.HA_PHOM, message_haPhom, sender);
				RoomExtension.haPhomid = idSender;
			}
			else{
				//Gửi cho người chơi trong phòng biết id của người sẽ bốc hoặc ăn bài
				SFSObject sfsO = new SFSObject();
				sfsO.putInt(KeyObjectId.BOC_HOAC_AN_BAI_ID, (idSender+1) % (RoomExtension.NumberOfPlayers));
				RoomExtension.UserRunning = (idSender+1) % (RoomExtension.NumberOfPlayers);
				send(RequestId.BOC_HOAC_AN_BAI, sfsO, user);
			}
		}
		else if(idSender == 2){
			RoomExtension.CardOfUser2Push.push(ThisCard);
			
			if(RoomExtension.CardOfUser2Push.size()==4){
				send(ResponseId.HA_PHOM, message_haPhom, sender);
				RoomExtension.haPhomid = idSender;
				
			}
			else{
				//Gửi cho người chơi trong phòng biết id của người sẽ bốc hoặc ăn bài
				SFSObject sfsO = new SFSObject();
				sfsO.putInt(KeyObjectId.BOC_HOAC_AN_BAI_ID, (idSender+1) % (RoomExtension.NumberOfPlayers));
				RoomExtension.UserRunning = (idSender+1) % (RoomExtension.NumberOfPlayers);
				send(RequestId.BOC_HOAC_AN_BAI, sfsO, user);
			}
		}
		else if(idSender == 3){
			RoomExtension.CardOfUser3Push.push(ThisCard);
			
			if(RoomExtension.CardOfUser3Push.size()==4){
				send(ResponseId.HA_PHOM, message_haPhom, sender);
				RoomExtension.haPhomid = idSender;
				
			}
			else{
				//Gửi cho người chơi trong phòng biết id của người sẽ bốc hoặc ăn bài
				SFSObject sfsO = new SFSObject();
				sfsO.putInt(KeyObjectId.BOC_HOAC_AN_BAI_ID, (idSender+1) % (RoomExtension.NumberOfPlayers));
				RoomExtension.UserRunning = (idSender+1) % (RoomExtension.NumberOfPlayers);
				send(RequestId.BOC_HOAC_AN_BAI, sfsO, user);
			}
		}
	}

}
